教学内容
STL的三种查找算法;
STL其他常用函数;
教学目标
学生熟练的掌握STL的三种查找算法。
重难点
STL三种查找算法之间的不同和联系。
课前准备
巩固知识点,复习习题
引入课题
查找一组数据中满足小于b大于a的数字的个数,分析题目:
暴力算法,时间复杂度$o(M*N)$
1 | for(int i=1; i <= M; i++) |
该程序的时间复杂度为$o(M*N)$,其中其中M的极限为50000,N的极限为1000000。
所以在最坏情况下,要运算:$50000*1000000 = 500$亿次.现在的计算机,
在1秒之内运算次数大概为5千万次左右,所以暴力方法肯定不能通过本题的全部数据!!!
所以,我们要学习新的算法,来高效的完成任务!!!
讲授新课
STL查找函数
STL 中常用的用于查找的函数有三个:lower_bound
、upper_bound
、binary_search
,一般 lower_bound
最为常用。
lower_bound
用于在一个升序序列中查找某个元素,并返回第一个不小于该元素的元素的下标,如果找不到,则返回指向序列中最后一个元素之后的迭代器。
upper_bound
用于在一个升序序列中查找某个元素,并返回第一个大于该元素的元素的迭代器,如果找不到,则返回指向序列中最后一个元素之后的迭代器。
binary_search
用于确定某个元素有没有在一个升序序列中出现过,返回 true
或 false
。
三个函数的时间复杂度均为$O({\log}n)$。
测试代码如下:
1 | int a[8] = { -9, 5, -1, 2, 7, 1, -2, 2 }, n = 8; |
ps: (得到查找函数返回的值需要减去数组的首地址,代码如下)
1 | int p = lower_bound(a, a + n, 8) - a; |
STL交换函数
使用 swap
函数交换两个变量的值。
1 | int a = -1, b = 1; |
STL较大、较小值
使用max
和 min
来取得两个数中较大或较小的。
int a = -1, b = 890;
x = max(a, b); // 结果为 890
y = min(a, b); // 结果为-1
课堂小结
课后反思
是否关照到每位同学
多关心学生家庭作业完成情况